<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //参数会形成一个单独的作用域
        function foo(x = x) {
            console.log(x);
        }


        // 解构赋值
        // 模式匹配，结构化赋值
        let [a, b, c] = [1, 2, 3]
        console.log(a);
        console.log(b);
        console.log(c);
        console.log('----------------------');
        let [d, [e],
            [f]
        ] = [1, [2],
            [3]
        ];
        console.log(d);
        console.log(e);
        console.log(f);
        //解构失败，填充undefined；
        let [de, aa] = [1]
        console.log(de, aa);
        //设置默认值
        let [ab = 6] = [];
        console.log(ab);

        // 对象解构
        // 属性名和变量一致的情况下，可以简写
        let {
            tt,
            rr
        } = {
            tt: 12,
            rr: 12
        }
        console.log(tt, rr);
        // 数组的解构存在顺序问题，对象的解构不存在
        // let {
        //     a: {
        //         b: {
        //             fsd
        //         }
        //     }
        // } = {
        //     a: 34
        // }
        // console.log(fsd);
        //变量的解构本质就是变量的赋值，解构就是模式匹配
        // 模式匹配可以匹配同源属性
    </script>
</body>

</html>